const mongoose = require('mongoose')
const db = 'mongodb://118.89.217.134:27017/test5c';

const glob = require('glob')  // 允许使用通配符*
const { resolve } = require('path')

mongoose.Promise = global.Promise  // 用标准 Promise 代替 mongoose 自己的 Promise

exports.initSchemas = () => {
    // 把 schema 目录下的所有 js 文件都 require 到这里
    glob.sync(resolve(__dirname, './schema', '**/*.js')).forEach(require)
}

// exports.initAdmin = async () => {
//     const User = mongoose.model('User')
//     let user = await User.findOne({
//         username: 'zty'
//     })
//
//     if (!user) {
//         const user = new User({
//             username: 'zty',
//             email: '327106366@qq.com',
//             password: 'zty19970521'
//         })
//
//         await user.save()
//     }
// }


exports.connect = () => {
    let maxConnectTimes = 0;  // 数据库断开链连接后最大连接次数

    return new Promise((resolve, reject) => {

        if (process.env.NODE_ENV !== 'production') {
            mongoose.set('debug', true)
        }


        // mongoose v 4.x
        // mongoose.connect(db, {
        //     useMongoClient: true
        // })

        // mongoose v 5.x
        mongoose.connect(db)

        mongoose.connection.on('disconnected', () => {  // 监听数据库断开链连接的事件及其回调函数

            maxConnectTimes++

            if (maxConnectTimes < 5) {
                mongoose.connect(db)
            } else {
                throw new Error('数据库 ' + db + ' 挂了')
            }
        })

        mongoose.connection.on('error', () => {  // 监听数据库错误的事件及其回调函数
            maxConnectTimes++

            if (maxConnectTimes < 5) {
                mongoose.connect(db)
            } else {
                throw new Error('数据库 ' + db + ' 挂了')
            }
        })

        mongoose.connection.once('open', () => {  // 监听数据库连接的事件及其回调函数
            // 测试向数据库写入数据
            // const Dog = mongoose.model('Dog',{ name: String})
            // const dgoa = new Dog({name: 'zzx'})

            // dgoa.save().then(() => {
            //     console.log('wang wang wang')
            // })


            resolve()
            console.log("连接 mongodb 数据库 " + db + " 成功");
        })
    })
}